package com.状态模式.state1;

/**
 * 抽象类：实现StateInterface状态接口
 * 抽出来AbstractStateImpl这一层的好处是：
 *   因为：
 *      1:我们每个具体的状态类可以直接实现StateInterface接口
 *      2:但是具体状态类实现StateInterface接口的时候就必须重写里面所有的方法
 *      3:我们每个具体的状态实现类仅仅只操作相关状态的逻辑，而实现StateInterface中所有的接口导致不相关
 *           的方式也被重写了，那么这样就违反单一职责
 *  所以：
 *    创建AbstractStateImpl类我们只需要重写自己相关的逻辑方法即可
 */
public abstract class AbstractStateImpl implements StateInterface{


    /**
     * 重写接口的方法
     * 若不是可以操作的状态你就不要调用，不然我就抛出异常给你
     */
    @Override
    public void notPay(Context context) {
        throw new RuntimeException(context.getCurrentState()+" ，不能执行此操作");
    }

    @Override
    public void paySuccess(Context context) {
        throw new RuntimeException(context.getCurrentState()+" ，不能执行此操作");
    }

    @Override
    public void notTake(Context context) {
        throw new RuntimeException(context.getCurrentState()+"，不能执行此操作");
    }

    @Override
    public void compeleted(Context context) {
        throw new RuntimeException(context.getCurrentState()+" ，不能执行此操作");
    }

    @Override
    public void requestRefund(Context context) {
        throw new RuntimeException(context.getCurrentState()+" ，不能执行此操作");
    }

    @Override
    public void refundSuccess(Context context) {
        throw new RuntimeException(context.getCurrentState()+" ，不能执行此操作");
    }
}
